package com.hb.core.config.handler;

import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.hb.core.pojo.JSONArrayProperty;

/**
 * 公共json字符串转换器
 *
 * @author zhaojk
 */
public interface HandlerConverter {
    /**
     * 将json字符串转换为指定的对象
     *
     * @param result
     * @param clazz  仅支持对象属性的转换
     * @param <T>
     * @return
     */
    default <T> T convert(String result, Class<T> clazz) {
        if (clazz == null) {
            return null;
        }
        // 当查询结果为null或者空对象时, 实例化一个对象返回
        if (StrUtil.isEmpty(result)) {
            return ReflectUtil.newInstance(clazz);
        }
        if (JSONUtil.isJsonObj(result)) {
            return JSONUtil.toBean(result, clazz);
        }
        if (JSONUtil.isJsonArray(result)) {
            JSONArray array = JSONUtil.parseArray(result);
            return array.toBean(clazz);
        }
        return null;
    }
}
